[PR]

水無瀬の部屋 > Programming > sample > tools > dlg > browsbox > browsbox.cpp
最終更新日: 2007/03/11

   1: //*********************************************************
   2: // プロジェクト: フォルダ参照ダイアログ
   3: //   ファイル名: browsbox.cpp
   4: //*********************************************************
   5: #include <dlg/browsbox/browsbox.h> //
   6: #include <header/tooldbg.h>        // ASSERT(), 
   7: #include <header/toolbase.h>        // 
   8: #include <header/toolwind.h>
   9: #include <header/toolsysx.h>
  10: 
  11: 
  12: //---------------------------------------------------------
  13: // ファイルスコープ関数 の 宣言
  14: //---------------------------------------------------------
  15: static int  CALLBACK BrowseBoxCallbackProc( HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData );
  16: 
  17: 
  18: //*********************************************************
  19: // BrowseForFolder
  20: //   flags …… BIF_RETURNONLYFSDIRS, BIF_NEWDIALOGSTYLE, BIF_BROWSEINCLUDEURLS, etc……
  21: //*********************************************************
  22: ITEMIDLIST *
  23: BrowseForFolder
  24: 	(
  25: 		      HWND         hWnd,
  26: 		      BFFCALLBACK  CallbackProc,
  27: 		      UINT         flags,
  28: 		const char       *title,
  29: 		const char       *defpath
  30: 	)
  31: {
  32: 	// パラメタの仮定
  33: 	ASSERT( IsValidStringPtr( title ) );
  34: 	ASSERT( !hWnd || IsValidWindow( hWnd ) );
  35: 	ASSERT( !defpath || IsValidStringPtr( defpath ) );
  36: 	ASSERT( !CallbackProc || IsValidCodePtr( CallbackProc ) );
  37: 
  38: 	BROWSEINFO bi;
  39: 	memzero( &bi, sizeof( bi ) );
  40: 	bi.hwndOwner = hWnd;            // 
  41: 	bi.ulFlags   = flags;           // 
  42: 	bi.lpszTitle = title;           // タイトル
  43: 	bi.lpfn      = CallbackProc;    // 
  44: 	bi.lParam    = (LPARAM)defpath; // デフォルトのフォルダ
  45: 	return SHBrowseForFolder( &bi );
  46: }//BrowseForFolder
  47: 
  48: //*********************************************************
  49: // BrowseBox
  50: //   flags …… BIF_RETURNONLYFSDIRS, BIF_BROWSEINCLUDEURLS, etc……
  51: //*********************************************************
  52: bool
  53: BrowseBox
  54: 	(
  55: 		HWND        hWnd,
  56: 		UINT        flags,
  57: 		const char *title,
  58: 		char       *buf,
  59: 		int         bufsize,
  60: 		const char *defpath
  61: 	)
  62: {
  63: 	// パラメタの仮定
  64: 	ASSERT( IsEnoughPathBufferSize( bufsize ) ); // [WARN]
  65: 	ASSERT( !hWnd || IsValidWindow( hWnd ) );
  66: 	ASSERT( IsValidStringBufferPtr( buf, bufsize ) );
  67: 	ASSERT( IsValidStringPtr( defpath ) );
  68: 	ASSERT( IsValidStringPtr( title ) );
  69: 	DESTROY_TEXT_BUFFER( buf, bufsize );
  70: 
  71: 	IMalloc *pMalloc;
  72: 	if ( NOERROR != SHGetMalloc( &pMalloc ) )
  73: 		return false;
  74: 
  75: 	ITEMIDLIST *pidl =
  76: 		BrowseForFolder
  77: 			(
  78: 				hWnd,
  79: 				BrowseBoxCallbackProc,
  80: 				flags | BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS,
  81: 				title,
  82: 				defpath
  83: 			);
  84: 	if ( pidl )
  85: 	{
  86: 		if ( GetPathFromIDList( pidl, buf, bufsize ) )
  87: 		{
  88: 			pMalloc->Free( pidl );
  89: 			pMalloc->Release();
  90: 			return true;
  91: 		}
  92: 		pMalloc->Free( pidl );
  93: 	}
  94: 	pMalloc->Release();
  95: 	return false;
  96: }//BrowseBox
  97: 
  98: 
  99: //******************************************************************************************************************
 100: // callback
 101: //******************************************************************************************************************
 102: //*********************************************************
 103: // BrowseBoxCallbackProc
 104: //*********************************************************
 105: static
 106: int
 107: CALLBACK
 108: BrowseBoxCallbackProc
 109: 	(
 110: 		HWND   hWnd,
 111: 		UINT   uMsg,
 112: 		LPARAM lParam,
 113: 		LPARAM lpData
 114: 	)
 115: {
 116: 	if ( ( BFFM_INITIALIZED == uMsg ) && lpData )
 117: 	{
 118: 		SendMessage( hWnd, BFFM_SETSELECTION, true, lpData );
 119: 	}
 120: 
 121: 	if ( ( BFFM_SELCHANGED == uMsg ) && lParam )
 122: 	{
 123: 		ITEMIDLIST *pidl = (ITEMIDLIST *)lParam;
 124: 
 125: 		char path[ MAX_PATH_BUF ];
 126: 		if ( GetPathFromIDList( pidl, path, numof(path) ) )
 127: 		{
 128: 			SendMessage( hWnd, BFFM_ENABLEOK , 0, true );
 129: 		}
 130: 		else
 131: 		{
 132: 			SendMessage( hWnd, BFFM_ENABLEOK , 0, false );
 133: 		}
 134: 	}
 135: 	return 0;
 136: }//BrowseBoxCallbackProc
 137: 
 138: 
 139: //** end **

参照:


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬の部屋 > sample > tools > dlg > browsbox > browsbox.cpp

このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/tools/dlg/browsbox/browsbox_cpp.shtml
同人ダウンロード販売
同人ダウンロード販売|DL.Getchu.com